Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>User exit</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/User_exit"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-User_exit rootpage-User_exit skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">User exit</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<p>A <b>user exit</b> is a <a href="Subroutine" class="mw-redirect" title="Subroutine">subroutine</a> invoked by a <a href="Software" title="Software">software</a> package for a predefined event in the execution of the package. In some cases the exit is specified by the installation when configuring the package while in other cases the users of the package can substitute their own subroutines in place of the default ones provided by the package vendor to provide customized functionality. In some cases security controls restrict exits to authorized users, e.g., <a href="EXCP" class="mw-redirect" title="EXCP">EXCP</a> <a href="Execute_Channel_Program#Appendages" title="Execute Channel Program">appendages</a> in <a href="MVS" title="MVS">MVS</a>.
</p><p>The earliest use of this term involved operating systems to let customized code temporarily take control when a pre-designated event occurred.<sup id="cite_ref-UE1_1-0" class="reference"><a href="#cite_note-UE1-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-UE2_2-0" class="reference"><a href="#cite_note-UE2-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p>A more typical use is replacing the user exits provided by a <a href="Sorting_algorithm" title="Sorting algorithm">sort/merge</a> package,<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> whereby the user program provides its own subroutines for comparing records. The procedures provided by the user take the place of the default routines (usually stubs that do nothing but <a href="Return_statement" title="Return statement">return</a> to their caller) provided by the package vendor.
</p><p>Procedures provided as user exits are typically <a href="Compiler" title="Compiler">compiled</a> into a <a href="Static_library" title="Static library">static library</a> and <a href="Linker_(computing)" title="Linker (computing)">linked</a> directly with the package to produce an <a href="Executable" title="Executable">executable program</a>. Another approach employs <a href="Dynamic_library" title="Dynamic library">dynamic libraries</a> to accomplish the same thing.
</p><p>Finally, user exits may be external programs executed at specific points in the execution of a host package.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="History">History</h2></div>
<p>Historically, this term is commonly used in IBM mainframe vernacular.<sup id="cite_ref-UE1_1-1" class="reference"><a href="#cite_note-UE1-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-UE2_2-1" class="reference"><a href="#cite_note-UE2-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li>Title: z/OS V1R10 DFSMS Installation Exits Document Number: SC26-7396-11</li>
<li>Title: z/OS V1R10.0 JES2 Installation Exits Document Number: SA22-7534-10</li>
<li>Title: z/OS V1R10.0 MVS Installation Exits Document Number: SA22-7593-14</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Restrictions">Restrictions</h2></div>
<p>If the user site specific code is substituted for the software vendor provided default exit it must interface to the software package using the defined parameters as documented for the default exit. User exits are important because while they enable site specific customization they isolate such installation specific customization to defined and supported points enabling the site to upgrade to follow-on releases of the software package without adverse impact to preexisting customized functionality. Some references to IBM user exit manuals are given below. Other vendors such as SAP, Oracle, IFS, HP, Macro4, Compuware, CA all employ user exits in some of their software products.
</p>
<div class="mw-heading mw-heading3"><h3 id="Example">Example</h3></div>
<p>In SAP, A 'COMMIT WORK' must never be used inside a User Exit, as it may affect the program processing. Furthermore, error messages may not be issued from inside an exit, as they halt the processing of the code that follows the message.
</p>
<div class="mw-heading mw-heading3"><h3 id="Enforcing_standards">Enforcing standards</h3></div>
<p>If files containing user-created content are meant to follow a standard, the (file) <i>Open</i> command of a word-processing document can invoke a user exit that does validation and, if necessary, returns an error code.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Applications">Applications</h2></div>
<p>Some applications that provide user exits:
</p>
<ul><li><a href="Apache_Subversion" title="Apache Subversion">Apache Subversion</a> allows "hooks", which are "scripts that run when an action is performed"</li>
<li>IBM <a href="CICS" title="CICS">CICS</a></li>
<li><a href="IBM" title="IBM">IBM</a> <a href="IBM_Configuration_Management_Version_Control_(CMVC)" class="mw-redirect" title="IBM Configuration Management Version Control (CMVC)">CMVC</a> user exits in the form of <a href="Kornshell" class="mw-redirect" title="Kornshell">Kornshell</a> scripts</li>
<li><a href="Job_Entry_Subsystem_2/3" title="Job Entry Subsystem 2/3">IBM JES 2 and 3</a></li>
<li><a href="MVS" title="MVS">IBM MVS</a>, <a href="Hierarchical_storage_management" title="Hierarchical storage management">SMS</a>, <a href="Z/OS" title="Z/OS">z/OS</a> and dozens of sub-components such as <a href="RACF" class="mw-redirect" title="RACF">RACF</a>, SMF, etc.</li>
<li><a href="IBM" title="IBM">IBM</a> sort/merge package</li>
<li>Oracle CC&amp;B</li>
<li><a href="SAP_AG" class="mw-redirect" title="SAP AG">SAP</a> R3</li></ul>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Callback_(computer_science)" class="mw-redirect" title="Callback (computer science)">Callback</a></li>
<li><a href="Hook_(computer_science)" class="mw-redirect" title="Hook (computer science)">Hook</a></li>
<li><a href="Library_(computing)" title="Library (computing)">Linking</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-UE1-1"><span class="mw-cite-backlink">^ <a href="#cite_ref-UE1_1-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-UE1_1-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text">IBM term: OS/MFT, MVT <style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite class="citation magazine cs1"><a rel="nofollow" class="external text" href="https://books.google.com/books?id=ql57Hehq6q0C">"OS User Exits"</a>. <i>Computerworld</i>. April 11, 1977. p.&nbsp;25. <q>... so that execution ... under OS/MFT or MVT. ... ease of use for applications with ... user exits</q></cite></span>
</li>
<li id="cite_note-UE2-2"><span class="mw-cite-backlink">^ <a href="#cite_ref-UE2_2-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-UE2_2-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.tibco.com/pub/managed-file-transfer-platform-server-for-zos/7.2.0/doc/pdf/MFT%2520Platform%2520Server%25207.2.0%2520for%2520zOS%2520Installation%2520And%2520Operations%2520Guide.pdf">"Platform Server for z/OS Installation and Operations Guide"</a> <span class="cs1-format">(PDF)</span>. <q>Using MFT Platform Server Exits describes the User Exits that ...</q></cite></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.icea100/cober15.htm">"COBOL E15 user exit: passing or changing records for sort"</a>. <q>If both E15 and E35 user exits are used ... SORTIN DD statement</q></cite></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://help.sap.com/erp2005_ehp_07/helpdata/en/81/80b6535fe6b74ce10000000a174cb4/content.htm">"Sorting Using the User Exit"</a>. <i>SAP.com (SAP Documentation)</i>.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://support.ca.com/cadocs/0/k010181e.pdf">"Unicenter CA-Sort for VSE"</a> <span class="cs1-format">(PDF)</span>. <q>If Unicenter CA-Sort overlays the user exit storage with ...</q></cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.redbooks.ibm.com/abstracts/gg244178.html">"Did You Say CMVC?"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2013-07-22</span></span>.</cite></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text">Sample: Opinion.AnalystID.StockSymbol.DateTime - Opinion.Q347.IBM.201907031321 - alternatively, the date/time portion may be filled in by the user exit.</span>
</li>
</ol></div></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2024-12-07" href="https://en.wikipedia.org/wiki/?title=User_exit&amp;oldid=1261655179">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>